// Controller: ActivitysController.java
package com.example.controller;

import com.example.entity.Activity;
import com.example.entity.Organizations;
import com.example.service.ActivityService;
import com.example.service.OrganizationService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.*;

import javax.servlet.http.HttpSession;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * 活动管理控制器。
 * 处理与活动相关的请求，包括创建、编辑、删除、查询等操作。
 */
@Controller
@RequestMapping("/organization") // 所有路径都以 /organization 为前缀
public class ActivitysController {

    @Autowired
    private ActivityService activityService; // 注入活动服务

    @Autowired
    private OrganizationService organizationService; // 注入机构服务

    /**
     * 显示编辑活动的表单页面。
     *
     * @param activityId 活动 ID
     * @param model      用于向视图传递数据
     * @return JSP 页面名称
     */
    @GetMapping("/editActivity/{activityId}")
    public String showEditActivityForm(@PathVariable int activityId, Model model) {
        Activity activity = activityService.getActivityById(activityId); // 获取活动信息
        model.addAttribute("activity", activity); // 添加到模型中供前端使用
        return "organization/editactivity"; // 返回编辑活动页面
    }

    /**
     * 删除指定 ID 的活动。
     *
     * @param activityId 要删除的活动 ID
     * @return 重定向到活动管理页面
     */
    @PostMapping("/deleteActivity")
    public String deleteActivity(@RequestParam int activityId) {
        activityService.deleteActivity(activityId); // 调用服务层删除活动
        return "redirect:/organization/guanli"; // 重定向到 guanli 页面
    }

    /**
     * 更新活动信息（POST 请求）。
     *
     * @param activity 包含更新数据的活动对象
     * @return 重定向到活动管理页面
     */


    /**
     * 获取当前机构的活动统计数据（如总活动数）。
     *
     * @param orgId 机构 ID
     * @return JSON 格式的数据
     */
    @GetMapping("/activityStats")
    @ResponseBody
    public Map<String, Object> getActivityStats(@RequestParam int orgId) {
        Map<String, Object> stats = new HashMap<>();
        stats.put("activityCount", activityService.countActivitiesByOrgId(orgId)); // 获取活动数量
        return stats;
    }

    /**
     * 添加新活动。
     *
     * @param formData 表单提交的数据
     * @param session  当前会话
     * @return 重定向到活动管理页面
     */
    @PostMapping("/addActivity")
    public String addActivity(@RequestBody Map<String, String> formData, HttpSession session) {
        Organizations org = (Organizations) session.getAttribute("organizations");
        if (org == null) {
            return "redirect:/users/login";
        }

        Activity activity = new Activity();
        activity.setOrgid(org.getOrgid()); // 使用 Session 中的 orgid
        activity.setTitle(formData.get("title"));
        activity.setCoverImage(formData.get("cover_image"));
        activity.setDescription(formData.get("description"));
        activity.setStartTime(formData.get("start_time"));
        activity.setEndTime(formData.get("end_time"));
        activity.setRegistrationDeadline(formData.get("registration_deadline"));
        activity.setLocation(formData.get("location"));
        activity.setMaxVolunteers(formData.get("max_volunteers"));
        activity.setServiceHours(formData.get("service_hours"));
        activity.setRequirements(formData.get("requirements"));
        activity.setStatus("未开始");
        activity.setIsApproved("待审核");

        activityService.createActivity(activity); // 创建活动

        return "redirect:/organization/guanli";
    }

    /**
     * 获取最新发布的活动。
     *
     * @param orgId 机构 ID
     * @return 最新的活动对象
     */
    @GetMapping("/latestActivity")
    @ResponseBody
    public Activity getLatestActivity(@RequestParam int orgId) {
        return activityService.findLatestByOrgId(orgId); // 查询最新活动
    }

    /**
     * 获取每月活动数量数据（用于图表展示）。
     *
     * @param orgId 机构 ID
     * @return 每月活动数量数组
     */
    @GetMapping("/monthlyActivityData")
    @ResponseBody
    public int[] getMonthlyActivityData(@RequestParam int orgId) {
        return activityService.getMonthlyActivityData(orgId); // 获取月度数据
    }

    /**
     * 获取该机构的所有活动列表。
     *
     * @param orgId 机构 ID
     * @return 活动列表
     */
    @GetMapping("/activities")
    @ResponseBody
    public List<Activity> getAllActivities(@RequestParam int orgId) {
        return activityService.getAllActivitiesByOrgId(orgId);
    }

    // 时间字段示例，用于记录创建和更新时间
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date create_time = new Date();

    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date update_time = new Date();

    /**
     * 获取进行中的活动列表。
     *
     * @param orgId 机构 ID
     * @return 进行中的活动列表
     */
    @GetMapping("/activities/ongoing")
    @ResponseBody
    public List<Activity> getOngoingActivities(@RequestParam int orgId) {
        return activityService.getOngoingActivitiesByOrgId(orgId);
    }

    /**
     * 获取即将开始的活动列表。
     *
     * @param orgId 机构 ID
     * @return 即将开始的活动列表
     */
    @GetMapping("/activities/upcoming")
    @ResponseBody
    public List<Activity> getUpcomingActivities(@RequestParam int orgId) {
        return activityService.getUpcomingActivitiesByOrgId(orgId);
    }

    /**
     * 获取已完成的活动列表。
     *
     * @param orgId 机构 ID
     * @return 已完成的活动列表
     */
    @GetMapping("/activities/completed")
    @ResponseBody
    public List<Activity> getCompletedActivities(@RequestParam int orgId) {
        return activityService.getCompletedActivitiesByOrgId(orgId);
    }

    /**
     * 编辑指定 ID 的活动。
     *
     * @param activityId 活动 ID
     * @param activity   新的活动数据
     * @return 更新后的活动对象
     */
    @PutMapping("/activities/edit/{activityId}")
    @ResponseBody
    public Activity editActivity(@PathVariable int activityId, @RequestBody Activity activity) {
        activity.setActivityId(activityId); // 设置活动 ID
        return activityService.updateActivity(activity); // 更新活动
    }

    /**
     * 显示添加活动的表单页面。
     *
     * @return 转发到添加活动页面
     */
    @GetMapping("/activities/create")
    public String showCreateForm() {
        return "forward:/WEB-INF/views/organization/addactivity.jsp"; // 跳转到添加活动页面
    }

    /**
     * 处理添加活动的表单提交。
     *
     * @param formData 表单数据
     * @param session  当前会话
     * @return 重定向到活动管理页面
     */
    @PostMapping("/activities/create")
    public String createActivity(@RequestParam Map<String, String> formData,
                                 HttpSession session) {

        Organizations org = (Organizations) session.getAttribute("organizations");
        if (org == null) {
            return "redirect:/users/login";
        }

        Activity activity = new Activity();
        activity.setOrgid(org.getOrgid());
        activity.setTitle(formData.get("title"));
        activity.setCoverImage(formData.get("cover_image"));
        activity.setDescription(formData.get("description"));
        activity.setStartTime(formData.get("start_time"));
        activity.setEndTime(formData.get("end_time"));
        activity.setRegistrationDeadline(formData.get("registration_deadline"));
        activity.setLocation(formData.get("location"));
        activity.setMaxVolunteers(formData.get("max_volunteers"));
        activity.setServiceHours(formData.get("service_hours"));
        activity.setRequirements(formData.get("requirements"));
        activity.setStatus("未开始");
        activity.setIsApproved("待审核");

        activity.setCreateTime(new Date());
        activity.setUpdateTime(new Date());

        activityService.createActivity(activity); // 创建活动

        return "redirect:/organization/guanli";
    }
}
